/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package validadores.validadoresformato;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 *
 * @author Steve
 */
public class FechaValidador implements validadores.ValidadorFormato {

    String sugerencia;
    String mensajeError;
    Date fechaInicio;
    Date fechaFinal;
    String formatoFecha;
    /**
     * Permite validar la fecha en formato dd/MM/yyyy
     */
    public static final String FORMATO_FECHA_1 = "dd/MM/yyyy";
    /**
     * Permite validar la fecha en formato dd/MM/yy
     */
    public static final String FORMATO_FECHA_2 = "dd/MM/yy";
    /**
     * Permite validar la fecha en formato yyyy/MM/dd
     */
    public static final String FORMATO_FECHA_3 = "yyyy/MM/dd";
    /**
     * Permite validar la fecha en formato yy/MM/dd
     */
    public static final String FORMATO_FECHA_4 = "yy/MM/dd";
    /**
     * Permite validar la fecha en formato dd-MM-yyyy
     */
    public static final String FORMATO_FECHA_5 = "dd-MM-yyyy";
    /**
     * Permite validar la fecha en formato dd-MM-yy
     */
    public static final String FORMATO_FECHA_6 = "dd-MM-yy";
    /**
     * Permite validar la fecha en formato yyyy-MM-dd
     */
    public static final String FORMATO_FECHA_7 = "yyyy-MM-dd";
    /**
     * Permite validar la fecha en formato yy-MM-dd
     */
    public static final String FORMATO_FECHA_8 = "yy-MM-dd";
    /**
     * Permite validar la hora en formato HH:mm:ss<br>
     * para utilizarlo concatenelo a continuacion de formato fecha
     * (este campo es opcional)
     */
    public static final String FORMATO_HORA_1 = " HH:mm:ss";
    /**
     * Permite validar la hora en formato HH:mm
     * para utilizarlo concatenelo a continuacion de formato fecha
     * (este campo es opcional)
     */
    public static final String FORMATO_HORA_2 = " HH:mm";

    /**
     * Constructor del validador. Permite validar un formato de fecha
     * especifico
     * @param sugerencia mensaje de sugerencia del valudador
     * @param formatoFecha formato de la fecha (cualquiera de las constantes
     * (FECHA_FORMATO_1 ... FECHA_FORMATO8)
     * @param mensajeError mesaje de error en caso de que no cumpla el formato
     */
    public FechaValidador(String sugerencia, String formatoFecha, String mensajeError) {
        this.sugerencia = sugerencia;
        this.mensajeError = mensajeError;
        this.formatoFecha = formatoFecha;
    }

    public void setSugerencia(String sugerencia) {
        this.sugerencia = sugerencia;
    }

    public String getSugerencia() {
        return sugerencia;
    }

    public void setMensajeError(String mensaje) {
        this.mensajeError = mensaje;
    }

    public String getMensajeError() {
        return mensajeError;
    }

    /**
     * Este metodo regresa la fecha final en caso de que se valide
     * un rango de fecha
     * @return fecha final rango
     */
    public Date getFechaFinal() {
        return fechaFinal;
    }

    /**
     * Establece la fecha final para la validacion de rangos
     * @param fechaFinal
     */
    public void setFechaFinal(Date fechaFinal) {
        this.fechaFinal = fechaFinal;
    }

    /**
     * Este metodo regresa la fecha inicial en caso de que se valide
     * un rango de fecha
     * @return fecha final rango
     */
    public Date getFechaInicio() {
        return fechaInicio;
    }

    /**
     * Establece la fecha inicial para la validacion de rangos
     * @param fechaInicio
     */
    public void setFechaInicio(Date fechaInicio) {
        this.fechaInicio = fechaInicio;
    }

    /**
     * Regresa el formato de fecha con el cual se esta validando
     * @return
     */
    public String getFormatoFecha() {
        return formatoFecha;
    }



    /**
     * Establece el formato con el que se desea validar la fecha
     * Debe ser una de las propiedades FORMATO_FECHA_1 ... FORMATO_FECHA_8
     * @param formatoFecha
     */
    public void setFormatoFecha(String formatoFecha) {
        this.formatoFecha = formatoFecha;
    }

    public boolean validar(String texto) {
        boolean ret = false;

        SimpleDateFormat formato = new SimpleDateFormat(getFormatoFecha());
        formato.setLenient(false);
        try {
            formato.parse(texto);

            ret = true;
        } catch (ParseException ex) {
            ret = false;
        }

        return ret;
    }
}
